'''
手写装饰器
先让用户选择，是登陆还是注册
选择序号完毕之后，运行相应的程序，
验证成功之后，可以让其继续选择，登陆还是注册，还可以选择退出(自己增加一个可修改密码功能)
提示：先在目录下创建一个user_pwd.txt账号密码文件

注册
登录
查看已存在的用户
修改密码

扩展：文件操作
__name__=__main__

选择执行的程序（登录，注册）-数据库的信息进行比对-file文件里面
'''
import time
p=open('py-log.txt','r')
user=p.read()
user=eval(user)
def menu():
    print('***************')
    print('0：退出程序')
    print('1：注册')
    print('2：登录')
    print('3：查看所有用户')
    print('4：修改密码') #流程：账号-老密码-新密码-修改成功
    print('***************')

def log(ms):#生成日志
    fp=open('py-log.txt','r+')
    # now=time.strftime('%Y-%m-%d %H:%M:%S')
    # res=fp.read()
    # print(res)
    fp.write(ms)
    fp.close()

def mylogger(func): #设置一个闭包
    def inner(*args,**kwags):
        if func(*args,**kwags):
            #写入功能
            log('{}'.format(user))
            msg=True
        else:
            msg=False
        return msg
    return inner
   
@mylogger #func=mylogger(register) #inner func(name,pwd,repwd)
def register(name,pwd,repwd):
    #查询账号是否存在
    #name不能为空
    #两个密码不一致
    if name in user.keys() or name == '':
        print('（账号已经存在）或者（账号不能为空）')
        flag=False
    else:
        if pwd==repwd:
            user[name]=pwd
            print('注册成功') 
            flag=True
        else:
            print('两次输入密码不一致')
            flag=False
    return flag
#登录
@mylogger
def login(name,password,count):
    # flag=False
    if name in user.keys() and user[name]==password:
        print('恭喜你，登录成功')
        flag=True
    else:
        if count>0:
            print('账号或密码错误，还有{}次机会'.format(count))
            flag=False
        else:
            print('没有机会了，一遍玩去吧！')
            exit()
    return flag

# 查询
# @mylogger
def find():
    if user=={}:
        flag=False
    else:
        for k,v in user.items():
            print(k,v)
        flag=True
    return flag
@mylogger
def change(name,password):
    if name in user.keys() and user[name]==password:
        newpassword=input('请输入你的新密码：')
        newpassword_1=input('请输入你的新密码：')
        if newpassword==newpassword_1:
            print('修改成功！')
            user[name]=newpassword
            flag=True
        else:
            print('两次输入有误！')
            flag=False
    else:
        print('你的账号或密码有误！')
        flag=False
    return flag
if __name__ == '__main__':#if语句中调用的是谁就执行谁
    start_time=time.time()#程序开始时间
    while True:
        menu()
        msg=input('请输入你的选项：')
        if msg.isdigit():
            if msg=='0':#退出
                end_time=time.time()
                print('当前程序执行了{0}时间'.format(end_time-start_time))
                break
            elif msg=='1': #注册
                while True:
                    name=input('请输入你的用户名：')
                    pwd=input('请输入你的密码：')
                    repwd=input('请再次输入密码，确认：')
                    if register(name,pwd,repwd):
                        break
            elif msg=='2': #登录
                count=2
                while count>=0:
                    name=input('输入用户名:')
                    password=input('输入密码:')
                    if login(name,password,count):
                        break
                    count-=1
            elif msg=='3':
                find()
            elif msg=='4':
                while True:
                    name=input('输入用户名:')
                    password=input('输入密码:')
                    if change(name,password):
                        break  
            else:
                print('不存在')
        else:
            print('输出有误')